package com.example.controller;

import com.example.pojo.PageBean;
import com.example.pojo.Report;
import com.example.pojo.Result;
import com.example.service.ReportService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import lombok.extern.slf4j.Slf4j;

import java.util.List;

@Slf4j
@RestController
@RequestMapping("/report")
public class ReportController {

    @Autowired
    private ReportService reportService;

    // 获取Report列表
    @GetMapping
    public Result<PageBean<Report>> list(
            @RequestParam(defaultValue = "1") Integer pageNum,
            @RequestParam(defaultValue = "10") Integer pageSize,
            @RequestParam(required = false) String status
    ) {
        PageBean<Report> pb = reportService.list(pageNum, pageSize, status);
        return Result.success(pb);
    }

    // 根据id查看某条Report
    @GetMapping("/detail")
    public Result<Report> detail(@RequestParam Integer id) {
        Report report = reportService.findById(id);
        return Result.success(report);
    }

    // 处理举报
    @PostMapping("/resolve")
    public Result<String> resolveReport(
            @RequestParam Integer reportId,
            @RequestParam Integer stuId
    ) {
        try {
            log.info("开始处理举报请求: reportId={}, stuId={}", reportId, stuId);
            
            // 参数验证
            if (reportId == null || reportId <= 0) {
                log.error("无效的reportId: {}", reportId);
                return Result.error("无效的举报ID");
            }
            if (stuId == null || stuId <= 0) {
                log.error("无效的stuId: {}", stuId);
                return Result.error("无效的学生ID");
            }
            
            // 检查举报是否存在
            Report report = reportService.findById(reportId);
            if (report == null) {
                log.error("举报记录不存在: reportId={}", reportId);
                return Result.error("举报记录不存在");
            }
            
            reportService.resolveReport(reportId, stuId);
            log.info("举报处理成功: reportId={}", reportId);
            return Result.success("举报已处理");
        } catch (Exception e) {
            log.error("处理举报失败: reportId={}, stuId={}, 错误类型: {}, 错误信息: {}", 
                    reportId, stuId, e.getClass().getName(), e.getMessage(), e);
            return Result.error("处理举报失败: " + e.getClass().getSimpleName() + " - " + e.getMessage());
        }
    }

    // 驳回举报
    @PostMapping("/reject")
    public Result<String> rejectReport(@RequestParam Integer reportId) {
        try {
            log.info("开始驳回举报: reportId={}", reportId);
            
            // 参数验证
            if (reportId == null || reportId <= 0) {
                log.error("无效的reportId: {}", reportId);
                return Result.error("无效的举报ID");
            }
            
            // 检查举报是否存在
            Report report = reportService.findById(reportId);
            if (report == null) {
                log.error("举报记录不存在: reportId={}", reportId);
                return Result.error("举报记录不存在");
            }
            
            reportService.rejectReport(reportId);
            log.info("举报驳回成功: reportId={}", reportId);
            return Result.success("举报已驳回");
        } catch (Exception e) {
            log.error("驳回举报失败: reportId={}, 错误类型: {}, 错误信息: {}", 
                    reportId, e.getClass().getName(), e.getMessage(), e);
            return Result.error("驳回举报失败: " + e.getClass().getSimpleName() + " - " + e.getMessage());
        }
    }
}